/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Sede;
import java.sql.SQLException;
import java.sql.Statement;
import org.json.JSONObject;
import java.util.List;
import java.sql.ResultSet;
import java.util.ArrayList;
import org.json.JSONArray;

/**
 *
 * @author andres
 */
public class Sede_DAO {

    public static boolean insertarSede(Sede sede) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Insertando Sede!");
            return false;
        }
        String query = "INSERT INTO sede(nombre, direccion, telefono, descripcion,estado_sede)"
                + "VALUES ('"
                + sede.getNombre()
                + "','" + sede.getDireccion()
                + "','" + sede.getTelefono()
                + "','" + sede.getDescripcion()
                + "','" + "on" + "')";
        System.out.println("\n\tQuery: " + query + "\n");
        System.out.println(query);
        try {
            s.executeUpdate(query);
            conexion.cerrarConexion();
            return true;
        } catch (SQLException se) {
            System.out.println("Error Insertando Sede!");
            conexion.cerrarConexion();
            return false;
        }
    }

    public static JSONObject consultarSede() {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject sedes = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando un Sede!");
            return sedes;
        }
        try {
            String query = "SELECT nombre,direccion,telefono,descripcion FROM sede ORDER BY nombre";
            System.out.println(query);

            JSONArray listaSedes = new JSONArray();
            rs = s.executeQuery(query);
            int i = 0;
            while (rs.next()) {
                JSONObject jo = new JSONObject();
                jo.put("nombre", rs.getString("nombre"));
                jo.put("telefono", rs.getString("telefono"));
                jo.put("direccion", rs.getString("direccion"));
                jo.put("descripcion", rs.getString("descripcion"));

                listaSedes.put(i++, jo);
            }
            sedes.put("sedes", listaSedes);

            query = "select count(*) from sede";

            rs = s.executeQuery(query);
            if (rs.next()) {
                sedes.put("tam", rs.getString(1));
            }
        } catch (SQLException se) {
            System.out.println("Error Consultado la sede\n" + se.getMessage());
        } finally {
            conexion.cerrarConexion();
        }
        return sedes;
    }

    public JSONArray consultarSedeTabla(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Edificios!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);
            JSONArray sedes = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject sede = new JSONObject();
                    sede.put("nombre", rs.getString(1));
                    sede.put("direccion", rs.getString(2));
                    sede.put("telefono", rs.getString(3));
                    sede.put("descripcion", rs.getString(4));
                    sede.put("estado_sede", rs.getString(5));
                    sede.put("tam", rs.getString(6));
                    sedes.put(i, sede);
                    i++;
                }
            } catch (Exception e) {
            }
            return sedes;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado la sedes");
            return null;
        }
    }

    public static boolean actualizarSede(Sede sede, String nombre) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error actualizando una Sede!");
            return false;
        }
        String query = "UPDATE sede set ";
        if (!sede.getNombre().equals("")) {
            query += "nombre ='" + sede.getNombre() + "' ";
        }
        if (!sede.getTelefono().equals("")) {
            query += ",direccion = '" + sede.getDireccion() + "' ";
        }
        if (!sede.getDireccion().equals("")) {
            query += ",telefono ='" + sede.getTelefono() + "' ";
        }
        if (!sede.getDescripcion().equals("")) {
            query += ",descripcion='" + sede.getDescripcion() + "'  ";
        }
        query += " where nombre = '" + nombre + "';";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al actualizar sede");
            return false;
        }
    }

    public static boolean sedeExiste(String nombre) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo conexion Revisar sede! " + se.getMessage());
            return false;
        }

        String query = "SELECT * FROM sede "
                + "WHERE nombre = '" + nombre + "';";

        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al consultar existencia de una Sede");
            return false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }

    public static JSONObject getSede(String nombre) {
        ConexionBD conex = new ConexionBD();
        JSONObject sedes = new JSONObject();

        try {
            Statement st = (Statement) conex.session.createStatement();

            ResultSet rs = st.executeQuery("SELECT * FROM sede "
                    + "WHERE nombre = '" + nombre + "';");
            int i = 0;
            while (rs.next()) {
                JSONObject sede = new JSONObject();
                sede.put("nombre", rs.getString(1));
                sede.put("telefono", rs.getString(2));
                sede.put("descripcion", rs.getString(3));
                sede.put("direccion", rs.getString(4));
                sede.put("estado_sede", rs.getString(5));
                sedes.put("" + i++, sede);
            }
        } catch (Exception e) {
        }
        return sedes;
    }

    public static boolean desactivarSede(String nombre) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error desactivando Sede!");
            return false;
        }
        String query = "UPDATE sede set estado_sede = 'off' where nombre = '" + nombre + "';";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al desactivar sede");
            return false;
        }
    }

    public static boolean activarSede(String nombre) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error desactivando Sede!");
            return false;
        }
        String query = "UPDATE sede set estado_sede = 'on' where nombre = '" + nombre + "';";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al desactivar sede");
            return false;
        }
    }
}
